package com.kinghood.productcenter.dao.product;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kinghood.productcenter.common.model.dao.product.ProductBaseDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kinghood.productcenter.common.model.dto.base.ListProductQueryDTO;
import com.kinghood.productcenter.common.model.dto.product.BaseProductDTODO;
import com.kinghood.productcenter.common.model.dto.product.GetProductBaseDTO;
import com.kinghood.productcenter.common.model.dto.product.ProductLabelListReqDTO;
import com.kinghood.productcenter.common.model.dto.sku.GetSkuRelateIdDTO;
import com.kinghood.productcenter.common.model.vo.base.AttributeNameVO;
import com.kinghood.productcenter.common.model.vo.base.AttributeValueVO;
import com.kinghood.productcenter.common.model.vo.product.ProductListVO;
import com.kinghood.productcenter.common.model.vo.product.ProductLabelVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 商品款式基础表 Mapper 接口
 * </p>
 *
 * @author KingHood
 * @since 2023-12-20
 */
public interface ProductBaseMapper extends BaseMapper<ProductBaseDO> {

    /**
     * 款式列表
     *
     * @param page  页
     * @param param 参数
     * @author jp
     * @date 2023/12/22
     */
    Page<ProductListVO> listProduct(Page<Object> page,@Param("param") ListProductQueryDTO param);

    /**
     * 获取商品基础信息，不包括属性
     *
     * @param productId 商品id
     * @return 基础商品信息
     * @author zfj
     * @date 2023/12/26
     */
    BaseProductDTODO getProduct(@Param("productId") Long productId);

    /**
     * 获取列表中存在的code
     *
     * @param productCodeList 产品代码列表
     * @author jp
     * @date 2023/12/28
     */
    List<String> getCodeByList(Set<String> productCodeList);

    /**
     * 获取产品标签
     *
     * @param param 参数
     * @return @return {@link List }<{@link ProductLabelVO }>
     * @author jp
     * @date 2024/01/12 15:02
     */
    List<ProductLabelVO> getProductLabel(ProductLabelListReqDTO param);

    /**
     * 获取标签值
     *
     * @param id 身份证件
     * @return @return {@link String }
     * @author jp
     * @date 2024/01/12 15:02
     */
    String getLabelValue(Long id);

    /**
     * 获取产品属性
     *
     * @return @return {@link List }<{@link AttributeValueVO }>
     * @author jp
     * @date 2024/01/15 15:54
     */
    List<AttributeNameVO> getProductAttribute();

    /**
     * 获取sku相关的id
     *
     * @param productId 商品id
     * @param skuCode sku编码
     * @return sku相关id
     * @author zfj
     * @date 2024/1/24
     */
    GetSkuRelateIdDTO getSkuRelateId(@Param("productId") Long productId, @Param("skuCode") String skuCode);

    /**
     * 获取款式的基础配置
     *
     * @param productId 款式id
     * @return base
     * @author zfj
     * @date 2024/1/25
     */
    GetProductBaseDTO getBase(@Param("productId") Long productId);

}
